API: Remove gdk_cursor_new_from_pixmap()
authorBenjamin Otte <otte@redhat.com>
Thu, 12 Aug 2010 13:43:23 +0000 (15:43 +0200)
committerBenjamin Otte <otte@redhat.com>
Sun, 26 Sep 2010 13:02:59 +0000 (15:02 +0200)
gdk_cursor_new_from_pixbuf() is the proper replacement.

docs/reference/gdk/gdk3-sections.txt
docs/reference/gdk/tmpl/cursors.sgml
gdk/gdk.symbols
gdk/gdkcursor.h
gdk/quartz/gdkcursor-quartz.c
gdk/win32/gdkcursor-win32.c
gdk/x11/gdkcursor-x11.c

index 003ec70b05746baaa850dd890a090b50af5a4ee5..554d5c8058687ba7dd9451c4d24d6fdfe5daafdf 100644 (file)
@@ -939,7 +939,6 @@ gdk_owner_change_get_type
 GdkCursor
 GdkCursorType
 gdk_cursor_new
-gdk_cursor_new_from_pixmap
 gdk_cursor_new_from_pixbuf
 gdk_cursor_new_from_name
 gdk_cursor_new_for_display
index ab5f74d7363025ef489aff17aced6596729a4527..3ac8b296901e27ff85580ef07d2c8fe22bd03eb7 100644 (file)
@@ -125,7 +125,7 @@ The standard cursors available.
 @GDK_LAST_CURSOR: last cursor type
 @GDK_BLANK_CURSOR: Blank cursor. Since 2.16
 @GDK_CURSOR_IS_PIXMAP: type of cursors constructed with 
-  gdk_cursor_new_from_pixmap() or gdk_cursor_new_from_pixbuf()
+  gdk_cursor_new_from_pixbuf()
 
 <!-- ##### FUNCTION gdk_cursor_new ##### -->
 <para>
@@ -136,19 +136,6 @@ The standard cursors available.
 @Returns: 
 
 
-<!-- ##### FUNCTION gdk_cursor_new_from_pixmap ##### -->
-<para>
-</para>
-
-@source: 
-@mask: 
-@fg: 
-@bg: 
-@x: 
-@y: 
-@Returns: 
-
-
 <!-- ##### FUNCTION gdk_cursor_new_from_pixbuf ##### -->
 <para>
 
index d663f5f07b03559da93f23fbd3d4bb9548cbf036..a040f427d0fdbeb655088818cf165f619583be8e 100644 (file)
@@ -336,7 +336,6 @@ gdk_cursor_unref
 gdk_cursor_get_display
 gdk_cursor_new_for_display
 gdk_cursor_new_from_pixbuf
-gdk_cursor_new_from_pixmap
 gdk_cursor_new_from_name
 gdk_cursor_get_image
 #endif
index 54461883a216cd9acc8ed9b7c121d0a81fb6e667..91fd6d523e1d74f4f5753050e9fe29f3a3c3130a 100644 (file)
@@ -141,12 +141,6 @@ GdkCursor* gdk_cursor_new_for_display       (GdkDisplay      *display,
 #ifndef GDK_MULTIHEAD_SAFE
 GdkCursor* gdk_cursor_new               (GdkCursorType    cursor_type);
 #endif
-GdkCursor* gdk_cursor_new_from_pixmap   (GdkPixmap       *source,
-                                         GdkPixmap       *mask,
-                                         const GdkColor  *fg,
-                                         const GdkColor  *bg,
-                                         gint             x,
-                                         gint             y);
 GdkCursor* gdk_cursor_new_from_pixbuf   (GdkDisplay      *display,
                                          GdkPixbuf       *pixbuf,
                                          gint             x,
index dcd4220031986196d91ea32e3cfc6c630bc955f3..96dc7704e032b47a964d3d6e4fdd9d0d756164b3 100644 (file)
@@ -237,91 +237,6 @@ gdk_cursor_new_for_display (GdkDisplay    *display,
   return gdk_quartz_cursor_new_from_nscursor (nscursor, cursor_type);
 }
 
-GdkCursor*
-gdk_cursor_new_from_pixmap (GdkPixmap      *source,
-                           GdkPixmap      *mask,
-                           const GdkColor *fg,
-                           const GdkColor *bg,
-                           gint            x,
-                           gint            y)
-{
-  NSBitmapImageRep *bitmap_rep;
-  NSImage *image;
-  NSCursor *nscursor;
-  GdkCursor *cursor;
-  int width, height;
-  gint tmp_x, tmp_y;
-  guchar *dst_data, *mask_data, *src_data;
-  guchar *mask_start, *src_start;
-  int dst_stride;
-
-  g_return_val_if_fail (GDK_IS_PIXMAP (source), NULL);
-  g_return_val_if_fail (GDK_IS_PIXMAP (mask), NULL);
-  g_return_val_if_fail (fg != NULL, NULL);
-  g_return_val_if_fail (bg != NULL, NULL);
-
-  GDK_QUARTZ_ALLOC_POOL;
-
-  gdk_drawable_get_size (source, &width, &height);
-
-  bitmap_rep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL
-               pixelsWide:(NSInteger)width pixelsHigh:(NSInteger)height
-               bitsPerSample:8 samplesPerPixel:4
-               hasAlpha:YES isPlanar:NO colorSpaceName:NSDeviceRGBColorSpace
-               bytesPerRow:0 bitsPerPixel:0];
-
-  dst_stride = [bitmap_rep bytesPerRow];
-  mask_start = GDK_PIXMAP_IMPL_QUARTZ (GDK_PIXMAP_OBJECT (mask)->impl)->data;
-  src_start = GDK_PIXMAP_IMPL_QUARTZ (GDK_PIXMAP_OBJECT (source)->impl)->data;
-
-  for (tmp_y = 0; tmp_y < height; tmp_y++)
-    {
-      dst_data = [bitmap_rep bitmapData] + tmp_y * dst_stride;
-      mask_data = mask_start + tmp_y * width;
-      src_data = src_start + tmp_y * width;
-
-      for (tmp_x = 0; tmp_x < width; tmp_x++)
-       {
-         if (*mask_data++)
-           {
-             const GdkColor *color;
-
-             if (*src_data++)
-               color = fg;
-             else
-               color = bg;
-
-             *dst_data++ = (color->red >> 8) & 0xff;
-             *dst_data++ = (color->green >> 8) & 0xff;
-             *dst_data++ = (color->blue >> 8) & 0xff;
-             *dst_data++ = 0xff;
-
-           }
-         else
-           {
-             *dst_data++ = 0x00;
-             *dst_data++ = 0x00;
-             *dst_data++ = 0x00;
-             *dst_data++ = 0x00;
-
-             src_data++;
-           }
-       }
-    }
-  image = [[NSImage alloc] init];
-  [image addRepresentation:bitmap_rep];
-  [bitmap_rep release];
-
-  nscursor = [[NSCursor alloc] initWithImage:image hotSpot:NSMakePoint(x, y)];
-  [image release];
-
-  cursor = gdk_quartz_cursor_new_from_nscursor (nscursor, GDK_CURSOR_IS_PIXMAP);
-
-  GDK_QUARTZ_RELEASE_POOL;
-
-  return cursor;
-}
-
 static NSImage *
 _gdk_quartz_pixbuf_to_ns_image (GdkPixbuf *pixbuf)
 {
index d3d709affac52f21a5770232e0e4174362d33345..6c10945f99451508fb79405c11e370aca4d9bce1 100644 (file)
@@ -178,169 +178,6 @@ color_is_white (const GdkColor *color)
          && color->blue == 0xFFFF);
 }
 
-GdkCursor*
-gdk_cursor_new_from_pixmap (GdkPixmap      *source,
-                           GdkPixmap      *mask,
-                           const GdkColor *fg,
-                           const GdkColor *bg,
-                           gint            x,
-                           gint            y)
-{
-  GdkPixmapImplWin32 *source_impl, *mask_impl;
-  guchar *source_bits, *mask_bits;
-  gint source_bpl, mask_bpl;
-  HCURSOR hcursor;
-  guchar *p, *q, *xor_mask, *and_mask;
-  gint width, height, cursor_width, cursor_height;
-  guchar residue;
-  gint ix, iy;
-  const gboolean bg_is_white = color_is_white (bg);
-  
-  g_return_val_if_fail (GDK_IS_PIXMAP (source), NULL);
-  g_return_val_if_fail (GDK_IS_PIXMAP (mask), NULL);
-  g_return_val_if_fail (fg != NULL, NULL);
-  g_return_val_if_fail (bg != NULL, NULL);
-
-  source_impl = GDK_PIXMAP_IMPL_WIN32 (GDK_PIXMAP_OBJECT (source)->impl);
-  mask_impl = GDK_PIXMAP_IMPL_WIN32 (GDK_PIXMAP_OBJECT (mask)->impl);
-
-  g_return_val_if_fail (source_impl->width == mask_impl->width
-                       && source_impl->height == mask_impl->height,
-                       NULL);
-  width = source_impl->width;
-  height = source_impl->height;
-  cursor_width = GetSystemMetrics (SM_CXCURSOR);
-  cursor_height = GetSystemMetrics (SM_CYCURSOR);
-
-  g_return_val_if_fail (width <= cursor_width && height <= cursor_height,
-                       NULL);
-
-  residue = (1 << ((8-(width%8))%8)) - 1;
-
-  source_bits = source_impl->bits;
-  mask_bits = mask_impl->bits;
-
-  g_return_val_if_fail (GDK_PIXMAP_OBJECT (source)->depth == 1
-                       && GDK_PIXMAP_OBJECT (mask)->depth == 1,
-                       NULL);
-
-  source_bpl = ((width - 1)/32 + 1)*4;
-  mask_bpl = ((mask_impl->width - 1)/32 + 1)*4;
-
-  GDK_NOTE (CURSOR, {
-      g_print ("gdk_cursor_new_from_pixmap: source=%p:\n",
-              source_impl->parent_instance.handle);
-      for (iy = 0; iy < height; iy++)
-       {
-         if (iy == 16)
-           break;
-
-         p = source_bits + iy*source_bpl;
-         for (ix = 0; ix < width; ix++)
-           {
-             if (ix == 79)
-               break;
-             g_print ("%c", ".X"[((*p)>>(7-(ix%8)))&1]);
-             if ((ix%8) == 7)
-               p++;
-           }
-         g_print ("\n");
-       }
-      g_print ("...mask=%p:\n", mask_impl->parent_instance.handle);
-      for (iy = 0; iy < height; iy++)
-       {
-         if (iy == 16)
-           break;
-
-         p = mask_bits + iy*source_bpl;
-         for (ix = 0; ix < width; ix++)
-           {
-             if (ix == 79)
-               break;
-             g_print ("%c", ".X"[((*p)>>(7-(ix%8)))&1]);
-             if ((ix%8) == 7)
-               p++;
-           }
-         g_print ("\n");
-       }
-    });
-
-  /* Such complex bit manipulation for this simple task, sigh.
-   * The X cursor and Windows cursor concepts are quite different.
-   * We assume here that we are always called with fg == black and
-   * bg == white, *or* the other way around. Random colours won't work.
-   * (Well, you will get a cursor, but not in those colours.)
-   */
-
-  /* Note: The comments below refer to the case fg==black and
-   * bg==white, as that was what was implemented first. The fg==white
-   * (the "if (fg->pixel)" branches) case was added later.
-   */
-
-  /* First set masked-out source bits, as all source bits matter on Windoze.
-   * As we invert them below, they will be clear in the final xor_mask.
-   */
-  for (iy = 0; iy < height; iy++)
-    {
-      p = source_bits + iy*source_bpl;
-      q = mask_bits + iy*mask_bpl;
-      
-      for (ix = 0; ix < ((width-1)/8+1); ix++)
-       if (bg_is_white)
-         *p++ |= ~(*q++);
-       else
-         *p++ &= *q++;
-    }
-
-  /* XOR mask is initialized to zero */
-  xor_mask = g_malloc0 (cursor_width/8 * cursor_height);
-
-  for (iy = 0; iy < height; iy++)
-    {
-      p = source_bits + iy*source_bpl;
-      q = xor_mask + iy*cursor_width/8;
-
-      for (ix = 0; ix < ((width-1)/8+1); ix++)
-       if (bg_is_white)
-         *q++ = ~(*p++);
-       else
-         *q++ = *p++;
-
-      q[-1] &= ~residue;       /* Clear left-over bits */
-    }
-      
-  /* AND mask is initialized to ones */
-  and_mask = g_malloc (cursor_width/8 * cursor_height);
-  memset (and_mask, 0xFF, cursor_width/8 * cursor_height);
-
-  for (iy = 0; iy < height; iy++)
-    {
-      p = mask_bits + iy*mask_bpl;
-      q = and_mask + iy*cursor_width/8;
-
-      for (ix = 0; ix < ((width-1)/8+1); ix++)
-       *q++ = ~(*p++);
-
-      q[-1] |= residue;        /* Set left-over bits */
-    }
-      
-  hcursor = CreateCursor (_gdk_app_hmodule, x, y, cursor_width, cursor_height,
-                         and_mask, xor_mask);
-
-  GDK_NOTE (CURSOR, g_print ("gdk_cursor_new_from_pixmap: "
-                            "%p (%dx%d) %p (%dx%d) = %p (%dx%d)\n",
-                            GDK_PIXMAP_HBITMAP (source),
-                            source_impl->width, source_impl->height,
-                            GDK_PIXMAP_HBITMAP (mask),
-                            mask_impl->width, mask_impl->height,
-                            hcursor, cursor_width, cursor_height));
-
-  g_free (xor_mask);
-  g_free (and_mask);
-
-  return cursor_new_from_hcursor (hcursor, GDK_CURSOR_IS_PIXMAP);
-}
-
 /* FIXME: The named cursors below are presumably not really useful, as
  * the names are Win32-specific. No GTK+ application developed on Unix
  * (and most cross-platform GTK+ apps are developed on Unix) is going
index a96af588e83839fef58a7e1c6a60f3ba34f6a9a0..cf54f5cd6a6e043bf920eb2a9366e7c144748689 100644 (file)
@@ -306,75 +306,6 @@ gdk_cursor_new_for_display (GdkDisplay    *display,
   return cursor;
 }
 
-/**
- * gdk_cursor_new_from_pixmap:
- * @source: the pixmap specifying the cursor.
- * @mask: the pixmap specifying the mask, which must be the same size as 
- *    @source.
- * @fg: the foreground color, used for the bits in the source which are 1.
- *    The color does not have to be allocated first. 
- * @bg: the background color, used for the bits in the source which are 0.
- *    The color does not have to be allocated first.
- * @x: the horizontal offset of the 'hotspot' of the cursor. 
- * @y: the vertical offset of the 'hotspot' of the cursor.
- * 
- * Creates a new cursor from a given pixmap and mask. Both the pixmap and mask
- * must have a depth of 1 (i.e. each pixel has only 2 values - on or off).
- * The standard cursor size is 16 by 16 pixels.
- *
- * Return value: a new #GdkCursor.
- **/
-GdkCursor*
-gdk_cursor_new_from_pixmap (GdkPixmap      *source,
-                           GdkPixmap      *mask,
-                           const GdkColor *fg,
-                           const GdkColor *bg,
-                           gint            x,
-                           gint            y)
-{
-  GdkCursorPrivate *private;
-  GdkCursor *cursor;
-  Pixmap source_pixmap, mask_pixmap;
-  Cursor xcursor;
-  XColor xfg, xbg;
-  GdkDisplay *display;
-
-  g_return_val_if_fail (GDK_IS_PIXMAP (source), NULL);
-  g_return_val_if_fail (GDK_IS_PIXMAP (mask), NULL);
-  g_return_val_if_fail (fg != NULL, NULL);
-  g_return_val_if_fail (bg != NULL, NULL);
-
-  source_pixmap = GDK_PIXMAP_XID (source);
-  mask_pixmap   = GDK_PIXMAP_XID (mask);
-  display = GDK_PIXMAP_DISPLAY (source);
-
-  xfg.pixel = fg->pixel;
-  xfg.red = fg->red;
-  xfg.blue = fg->blue;
-  xfg.green = fg->green;
-  xbg.pixel = bg->pixel;
-  xbg.red = bg->red;
-  xbg.blue = bg->blue;
-  xbg.green = bg->green;
-  
-  if (display->closed)
-    xcursor = None;
-  else
-    xcursor = XCreatePixmapCursor (GDK_DISPLAY_XDISPLAY (display),
-                                  source_pixmap, mask_pixmap, &xfg, &xbg, x, y);
-  private = g_new (GdkCursorPrivate, 1);
-  private->display = display;
-  private->xcursor = xcursor;
-  private->name = NULL;
-  private->serial = theme_serial;
-
-  cursor = (GdkCursor *) private;
-  cursor->type = GDK_CURSOR_IS_PIXMAP;
-  cursor->ref_count = 1;
-  
-  return cursor;
-}
-
 void
 _gdk_cursor_destroy (GdkCursor *cursor)
 {
@@ -588,8 +519,8 @@ update_cursor (gpointer data,
  * If the windowing system supports it, existing cursors created 
  * with gdk_cursor_new(), gdk_cursor_new_for_display() and 
  * gdk_cursor_new_for_name() are updated to reflect the theme 
- * change. Custom cursors constructed with gdk_cursor_new_from_pixmap() 
- * or gdk_cursor_new_from_pixbuf() will have to be handled
+ * change. Custom cursors constructed with
+ * gdk_cursor_new_from_pixbuf() will have to be handled
  * by the application (GTK+ applications can learn about 
  * cursor theme changes by listening for change notification
  * for the corresponding #GtkSetting).
@@ -891,6 +822,57 @@ gdk_display_get_default_cursor_size (GdkDisplay *display)
 
 #else
 
+static GdkCursor*
+gdk_cursor_new_from_pixmap (GdkPixmap      *source,
+                           GdkPixmap      *mask,
+                           const GdkColor *fg,
+                           const GdkColor *bg,
+                           gint            x,
+                           gint            y)
+{
+  GdkCursorPrivate *private;
+  GdkCursor *cursor;
+  Pixmap source_pixmap, mask_pixmap;
+  Cursor xcursor;
+  XColor xfg, xbg;
+  GdkDisplay *display;
+
+  g_return_val_if_fail (GDK_IS_PIXMAP (source), NULL);
+  g_return_val_if_fail (GDK_IS_PIXMAP (mask), NULL);
+  g_return_val_if_fail (fg != NULL, NULL);
+  g_return_val_if_fail (bg != NULL, NULL);
+
+  source_pixmap = GDK_PIXMAP_XID (source);
+  mask_pixmap   = GDK_PIXMAP_XID (mask);
+  display = GDK_PIXMAP_DISPLAY (source);
+
+  xfg.pixel = fg->pixel;
+  xfg.red = fg->red;
+  xfg.blue = fg->blue;
+  xfg.green = fg->green;
+  xbg.pixel = bg->pixel;
+  xbg.red = bg->red;
+  xbg.blue = bg->blue;
+  xbg.green = bg->green;
+  
+  if (display->closed)
+    xcursor = None;
+  else
+    xcursor = XCreatePixmapCursor (GDK_DISPLAY_XDISPLAY (display),
+                                  source_pixmap, mask_pixmap, &xfg, &xbg, x, y);
+  private = g_new (GdkCursorPrivate, 1);
+  private->display = display;
+  private->xcursor = xcursor;
+  private->name = NULL;
+  private->serial = theme_serial;
+
+  cursor = (GdkCursor *) private;
+  cursor->type = GDK_CURSOR_IS_PIXMAP;
+  cursor->ref_count = 1;
+  
+  return cursor;
+}
+
 GdkCursor *
 gdk_cursor_new_from_pixbuf (GdkDisplay *display, 
                            GdkPixbuf  *pixbuf,